package com.xvdong.gadget;

/**
 * Created by xvDong on 2025/6/9.
 * 查找指定目录下的文件名的路径
 */

import java.io.File;

public class FileFinder {

    public static void main(String[] args) {
        String startDirectory = "C:\\sy"; // 指定的起始目录
        String fileNameToFind = "BaseSameActivity"; // 要查找的文件名（不包含扩展名）

        System.out.println("Searching for '" + fileNameToFind + "' in directory: " + startDirectory);
        System.out.println("--------------------------------------------------");

        findFile(startDirectory, fileNameToFind);

        System.out.println("--------------------------------------------------");
        System.out.println("Search complete.");
    }

    /**
     * 递归查找指定文件名的文件并打印其路径。
     *
     * @param directoryPath 当前要搜索的目录路径。
     * @param fileNameToFind 要查找的文件名（不区分大小写）。
     */
    public static void findFile(String directoryPath, String fileNameToFind) {
        File directory = new File(directoryPath);

        // 检查目录是否存在且是一个目录
        if (!directory.exists() || !directory.isDirectory()) {
            System.err.println("Error: Directory does not exist or is not a directory: " + directoryPath);
            return;
        }

        File[] files = directory.listFiles(); // 获取目录下的所有文件和子目录

        if (files != null) {
            for (File file : files) {
                if (file.isDirectory()) {
                    // 如果是子目录，则递归调用自身继续查找
                    findFile(file.getAbsolutePath(), fileNameToFind);
                } else {
                    // 如果是文件，则检查文件名是否匹配 (不区分大小写)
                    // 使用 file.getName().equalsIgnoreCase(fileNameToFind) 匹配文件名的主要部分
                    // 也可以考虑 if (file.getName().toLowerCase().contains(fileNameToFind.toLowerCase()))
                    // 如果您想匹配文件名中包含 "ModbusAsciiGenerator" 的文件
                    if (file.getName().toLowerCase().contains(fileNameToFind.toLowerCase())) {
                        System.out.println("Found: " + file.getAbsolutePath());
                    }
                }
            }
        }
    }
}